package com.smrtcold.dev.utils;

import com.smrtcold.dev.dto.dev.base.Point;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

/**
 * 1.判断配置property文件属性 sys.back.data 指定的路径是否存在
 * 2.判断配置的路径下是否存在databack文件，如果存在，说明数据库备份已经完成，不需要备份
 * 3.如果不存在databack文件，则开始备份设备第一次读取到的原始数据
 */
public class DataUtil {

    private static final String LockFile = "datalock";

    /**
     * 判断配置property文件属性 sys.back.data
     *
     * @param _path 路径
     * @param deviceId 设备ID
     * @return true 路径存在，false 路径不存在
     */
    public static boolean isHasDataBack(String _path, String deviceId) {
        return !hasLockFile(_path,deviceId);
    }

    public static boolean hasLockFile(String _path, String deviceId) {
        Path path = Paths.get(_path + "/" + LockFile+"_"+deviceId);
        return Files.exists(path);
    }
    public static boolean deleteLockFile(String _path, String deviceId) {
        Path path = Paths.get(_path + "/" + LockFile+"_"+deviceId);
        if (path.toFile().exists()) {
            return path.toFile().delete();
        }
        return false;
    }
    /**
     * 创建锁文件
     */
    public static boolean createLockFile(String _path,String deviceId) {
        File file = new File(_path + "/" + LockFile+"_"+deviceId);
        try {
            File parentDir = file.getParentFile();
            if (parentDir != null && !parentDir.exists()) {
                if (!parentDir.mkdirs()) {  // 创建所有缺失的目录
                    throw new IOException("目录创建失败: " + parentDir.getAbsolutePath());
                }
            }
            file.createNewFile();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    /**
     * 根据设备ID 备份对应设备数据
     *
     * @param deviceId 设备ID
     * @param points   数据点位
     */
    public static void backupData(String _path, String deviceId, List<Point> points) throws Exception {
        File file = new File(_path + "/" + deviceId + ".csv");
        String line = "";
        File parentDir = file.getParentFile();
        if (parentDir != null && !parentDir.exists()) {
            if (!parentDir.mkdirs()) {  // 创建所有缺失的目录
                throw new IOException("目录创建失败: " + parentDir.getAbsolutePath());
            }
        }
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            // 写入CSV表头
            writer.write("name,address,value");
            writer.newLine();
            // 遍历每个Point对象，写入数据行
            for (Point point : points) {
                line = String.format("%s,%s,%s", point.getName(), point.getAddres(), point.getValue());
                writer.write(line);
                writer.newLine();
            }
            writer.flush();
        }
         //执行添加标记
        createLockFile(_path,deviceId);
    }
}
